package com.jming.helloworld.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import com.jming.common.ApiResponse;

@ControllerAdvice //添加完此注解后，此类随着springboot项目的启动而启动，并且会监控controller的异常.监听项目中所有的异常
@ResponseBody
public class JmExceptionAdvice {
 
    //这里的异常都是意外异常，并不是业务异常，业务异常后端controller会处理返回给前端.业务异常会和前端沟通好已规定的状态码返回。
    @ExceptionHandler(NullPointerException.class)
    public ApiResponse<String> doNullPointerException(NullPointerException e){
        ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
        return apiResponse;
    }
 
    // 默认的异常处理，当有有异常出现的时候，会先匹配子类的异常，当所有的异常都没有匹配的时候就会走这一条默认的一场路线业务。
    @ExceptionHandler(Exception.class)
    public ApiResponse<String> doException(Exception e){
        ApiResponse<String> apiResponse = new ApiResponse<>(HttpStatus.INTERNAL_SERVER_ERROR.value(), e.getMessage(), null);
        return apiResponse;
    }
}